; ; Copyright (c) 1995-1999 by Mentec, Inc., U.S.A. ; All rights reserved. ; ; THIS SOFTWARE IS FURNISHED UNDER LICENSE AND MAY BE USED ; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE. ; ; VERSION: 03.16 ; ; PREVIOUSLY MODIFIED BY: ; ; G. MARIGOWDA, J. MELVIN, P.WEISS, L. KOGAN ; ; MODIFIED FOR RSX-11M-PLUS V4.4 BY: ; ; J. MELVIN 02-MAY-1990 03.12 ; JJM0454 - DO NOT UPDATE CREDIT COUNT FOR ALL PACKET TYPES ; ; J. MELVIN 26-FEB-1992 03.13 ; JJM0481 - CORRECT USE OF I/O PACKET LENGTH ; ; J. MELVIN 28-FEB-1992 03.14 ; JJM0478 - INITIALIZE Q.INF FIELD BASED ON CONTROLLER MODEL ; ; J. MELVIN 02-MAR-1992 03.15 ; JJM0482 - REINSERT DEBUG MACRO POINTS ; ; MODIFIED FOR RSX-11M-PLUS V4.5 BY: ; ; D. CARROLL 24-MAY-1993 03.16 ; DC215 - ADD C2.FRK FOR mP FORK CONDITION ; ; .IIF NDF,R$$UDA R$$UDA=0 ; INSURE IT IS DEFINED .IIF NDF,R$$MYA R$$MYA=0 ; INSURE IT IS DEFINED ;======================================================================== ; THE FOLLOWING DEFINITIONS MAY BE CHANGED TO CUSTOMIZE THE MSCP DRIVERS ;======================================================================== MAXWBT = 8. ; MAXIMUM UMR WAIT BLOCK TABLE ENTRIES ; MAXIMUM # OF I/O'S EACH CONTROLLER ; CAN HAVE OUTSTANDING AT ONE TIME DUUMR = 4 ; PREALLOCATED UMR WAIT BLOCKS FOR DU MUUMR = 2 ; PREALLOCATED UMR WAIT BLOCKS FOR MU ; DUTMO = ; DSA CONTROLLERS SEND THE HOST A TIMEOUT VALUE WHEN THEY ARE ; BROUGHT ONLINE. FOR DISK CONTROLLERS, THIS VALUE IS TYPICALLY ; BETWEEN 30 SEC AND 2 MIN. IF THE CONTROLLER BECOMES UNAVAIL- ; ABLE, IT WILL TAKE THE HOST 2*(TIMEOUT VALUE)+3 SEC TO RESYNCH ; THIS TIME PERIOD IS LONGER THAN NECESSARY BECAUSE THE DRIVER ; DOES NOT IMPLEMENT SOME OF THE LONGER MSCP COMMANDS, SUCH AS ; 'ERASE'. FOR SOME APPLICATIONS THE TIME DELAY SPECIFIED BY ; THE CONTROLLER MAY BE UNACCEPTABLE. DEFINING DUTMO WILL CAUSE ; THIS VALUE TO BE USED FOR THE TIMEOUT PERIOD. ; *****DO NOT***** USE THIS OPTION UNLESS YOUR APPLICATION ; ABSOLUTELY REQUIRES IT. IF YOU USE THIS OPTION, AND YOU EX- ; PERIENCE INEXPLICABLY FAILED COMMANDS OR EXCESSIVE RESYNCHING ; RAISE THIS VALUE **BEFORE** SUBMITTING A PROBLEM REPORT. DO ; NOT UNDER ANY CIRCUMSTANCES ATTEMPT TO USE VALUE < 5 SEC. ; A COMPARABLE VALUE IS NOT INCLUDED FOR TAPE DRIVERS BECAUSE ; THE REWIND COMMAND IS ONE OF THE LONGEST TMSCP COMMANDS. SPNTMO = 20. ; # SECONDS TO DELAY BEFORE DOING GUS ; TO RA81 IMMEDIATELY AFTER POWERFAIL. ;===================================================================== ; END OF ALTERABLE DEFINITIONS ;===================================================================== .NLIST ;===================================================================== ; DEFINE CST OFFSETS FOR DSA ;===================================================================== .ASECT ; DEFINE CST OFFSETS FOR DSA .=0 C.STAT: .BLKW 1 ; CONNECTION STATE STATUS C1.RDY = 1 ; READY C1.ONL = 2 ; IN TRANSITION FOR 'CON ONL' C1.SCC = 4 ; WAITING FOR 'SCC' TO END C1.GUS = 10 ; 'GUS' COMMAND MUST BE ISSUED C1.AVN = 20 ; 'AVL' COMMAND MUST BE ISSUED C1.SYN = 40 ; CNTRL SYNCHRONIZATION IN PROGRESS C1.REC = 100 ; SYNCHRONIZATION RECOVERY - PHASE 1 C1.CON = 200 ; SYNCHRONIZATION RECOVERY - PHASE 2 C1.UMR = 400 ; ALLOCATE UMRS IF UNIBUS SYSTEM C1.DQU = 1000 ; CALL $DQUMR WHEN EXITING DRIVER C1.FAT = 2000 ; FATAL ERROR OCCURRED C1.ABO = 4000 ; ABORT COMMANDS MUST BE ISSUED C1.GCS = 10000 ; 'GCS' COMMAND MUST BE ISSUED C1.TMO = 20000 ; TIMEOUT HAS OCCURRED C1.R1 = 40000 ; RECOVERY - START ON-LINES C1.R2 = 100000 ; RECOVERY - UNITS STILL SPINNING UP C.EXTN: .BLKW 1 ; RESERVED. DO NOT MOVE/REMOVE C.CMST: .BLKW 2 ; OLDEST OUTSTANDING COMMAND STATUS C.OLHD: .BLKW 2 ; OUTSTANDING IOPS LIST HEAD C.CMDS: .BLKW 1 ; CREDIT COUNT C.VCID: .BLKB 1 ; VIRTUAL CIRCUIT ID C.FLAG: .BLKB 1 ; CLASS DRIVER CONTROL FLAG C2.SHD = 1 ; RECURSION DURING DISK SHADOWING C2.FRK = 2 ; mP FORK BLOCK QUEUED C.REDO: .BLKW 1 ; OLDEST COMMAND TO REISSUE AT RESYNCH C.REQU: .BLKW 2 ; QUEUE OF CMDS TO RESTART AFTER RESYNCH .IF DF E$$LOG C.MLNG: .BLKW 1 ; LENGTH OF CONTROLLER ERROR LOG PACKET C.CRED: .BLKB 1 ; CREDIT/DEBIT COUNTS C.VCIX: .BLKB 1 ; VIRTUAL CIRCUIT ID C.IP: .BLKW 1 ; SAVED IP REGISTER C.SA: .BLKW 1 ; SAVED SA REGISTER .ENDC ;E$$LOG .IF DF M$$EXT C.UMCT: .BLKW 1 ; UMR COUNTER FIELD C.UMRW: .BLKW MAXWBT ; UMR WAIT BLOCK TABLE .ENDC ;M$$EXT CSTLEN = <.-C.STAT>/2 ; CST LENGTH IN WORDS ;====================================================================== ; DEFINE QST OFFSETS FOR DSA ;====================================================================== .ASECT .=0 Q.CST: .BLKW 1 ; ADDRESS OF ASSOCIATED CST Q.STAT: .BLKW 1 ; PORT-TO-CONTROLLER LINK STATUS Q1.RDY= 1 ; READY Q1.OFF= 2 ; OFF-LINE (UNUSABLE) Q1.SYN= 100000 ; SYNCHRONIZING Q.SAD: .BLKW 1 ; INTERRUPT HANDLER ADDRESS (DYNAMIC) .BLKB 1 ; RESERVED FOR DIGITAL USE Q.INF: .BLKB 1 ; CONTROLLER IDENTIFICATION INFORMATION ; Q.INF DEFINITIONS APPEAR IN UDADF.MAC Q.RSPN: .BLKB 1 ; NUMBER OF RESPONSE RING DESCRIPTORS Q.CMDN: .BLKB 1 ; NUMBER OF COMMAND RING DESCRIPTORS Q.CTM: .BLKB 1 ; CURRENT TIME-OUT COUNT Q.RTY: .BLKB 1 ; CURRENT RETRY COUNT Q.RING: ; RESPONSE RING AREA ADDRESS Q.FRSP: .BLKW 1 ; FIRST RESPONSE RING ADDRESS Q.LRSP: .BLKW 1 ; LAST RESPONSE RING ADDRESS Q.FCMD: .BLKW 1 ; FIRST COMMAND RING ADDRESS Q.LCMD: .BLKW 1 ; LAST COMMAND RING ADDRESS Q.RPAT: .BLKW 1 ; ADDRESS OF TABLE OF RSP PKT ADDRESSES Q.CPAT: .BLKW 1 ; ADDRESS OF TABLE OF CMD PKT ADDRESSES Q.STEP: ; SYNCHRONIZATION STEP BIT. OVERLAPS ; Q.CRSP AND >MUST< REMAIN HERE. Q.CRSP: .BLKW 1 ; ADDRESS OF CURRENT RESPONSE PACKET Q.INDX: ; SYNCHRONIZATION STEP INDEX. OVERLAPS ; Q.CCMD AND >MUST< REMAIN HERE. Q.CCMD: .BLKW 1 ; FIRST COMMAND PACKET ADDRESS Q.WRIT: .BLKW 4 ; VALUES TO WRITE TO SA DURING SYNCH Q.TEMP: .BLKW 1 ; CONTROLLER SPECIFIC SCRATCH/WORK AREA Q.IOSQ: .BLKB 1 ; CONTROLLER SPECIFIC I/O SEQUENCE # .BLKB 1 ; RESERVED FOR DIGITAL USE Q.CNTI: .BLKW 4 ; CONTROLLER T/MSCP IDENTIFIER Q.ID = Q.CNTI+6 ; CONTROLLER ID Q.CSVR: .BLKB 1 ; CONTROLLER SOFTWARE VERSION Q.CHVR: .BLKB 1 ; CONTROLLER HARDWARE VERSION QSTLEN = <.-Q.CST>/2 ; QST LENGTH IN WORDS ; ;========================================================================= ; DEFINE RCT DATA STRUCTURES ;========================================================================= ;+ ; DEFINE THE ERROR LOG PACKET OFFSETS USED FOR COMMUNICATION BETWEEN FROM ; DUDRV AND RCT TO ERROR LOG. .=177776 M$RSF: .BLKW 1 ; REPLACEMENT STATUS FLAG WORD M$CRF: .BLKW 2 ; COMMAND REFERENCE NUMBER M$UNIT: .BLKW 1 ; UNIT NUMBER M$SEQ: .BLKW 1 ; SEQUENCE NUMBER M$FMT: .BLKB 1 ; FORMAT M$FLAG: .BLKB 1 ; FLAGS M$OPCD: .BLKW 1 ; EVENT CODE / SUBCODE M$CNTI: .BLKW 4 ; CONTROLLER IDENTIFIER M$CSVR: .BLKB 1 ; CONTROLLER SOFTWARE VERSION M$CHVR: .BLKB 1 ; CONTROLLER HARDWARE VERSION M$MLUN: .BLKW 1 ; MULTIUNIT CODE M$UNTI: .BLKW 4 ; UNIT IDENTIFIER M$USVR: .BLKB 1 ; UNIT SOFTWARE VERSION M$UHVR: .BLKB 1 ; UNIT HARDWARE VERSION M$CYL: .BLKW 1 ; CYLINDER (NOT USED BY RCT) M$VRSN: .BLKW 2 ; VOLUME SERIAL NUMBER M$BLBN: .BLKW 2 ; BAD LBN M$NRBN: .BLKW 2 ; NEW RBN M$HED: .BLKW 1 ; HEADER CODE . = M$HED M$ORBN: .BLKW 2 ; OLD RBN M$CAUS: .BLKW 1 ; CAUSE M$SIZ= . - M$RSF ; SIZE OF PACKET (BYTES) ;+ ; REPLACEMENT STATUS FLAG WORD BIT DEFINITIONS (M$RSF) ;- MF$PRI=1 ; PRIMARY RBN USED MF$SUC=2 ; REPLACEMENT SUCCESSFUL FLAG MF$ISF=40000 ; IGNORE STATUS FLAGS MF$LNG=100000 ; LONG RCT PACKET .PSECT ;============================================================================= ; DRIVER WIDE MACRO DEFINITIONS ;============================================================================= .MACRO CALLV TYPE, RTN ; CALL AND RETURN FROM CLASS OR PORT .IF IDN , JSR PC,@120000+RTN ; CALL TO CLASS DRIVER ROUTINE .ENDC ; CLASS .IF IDN , JSR PC,@140000+RTN ; CALL TO PORT DRIVER ROUTINE .ENDC ; PORT .ENDM ; CALLV .MACRO JMPV TYPE, RTN ; JUMP TO CLASS OR PORT WITH NO RETURN .IF IDN , JMP @120000+RTN ; JUMP TO CLASS DRIVER ROUTINE .ENDC ; CLASS .IF IDN , JMP @140000+RTN ; JUMP TO PORT DRIVER ROUTINE .ENDC ; PORT .ENDM ; JMPV .MACRO PUSH LIST ; PUSH LIST OF ITEMS ONTO STACK .IRP XX, .IF IDN <#0> CLR -(SP) ; '0' ITEM .IFF ; #0 MOV XX,-(SP) ; NON-ZERO ITEMS .ENDC ; #0 .ENDM ; IRP .ENDM ; PUSH .MACRO POP LIST ; PULL LIST OF ITEMS OFF STACK .IRP XX, MOV (SP)+,XX ; ALL ITEMS .ENDM ; IRP .ENDM ; POP .MACRO $IDENT NAME,IDMAJ,IDMIN,TEXT ; SET UP MODULE IDENTITY .TITLE NAME V'IDMAJ'.'IDMIN 'TEXT ; NAME / VERSION NUMBER / TITLE .RADIX 10. ; ALWAYS USE DECIMAL VERSIONS MAJOR = 'IDMAJ ; MAJOR VERSION MINOR = 'IDMIN ; MINOR VERSION .RADIX 8. ; BACK TO THE NORMAL DEFAULT .ENDM ; $IDENT .MACRO FUNCT FCN, OPCOD, PKTSIZ, PRO ; RSX TO T/MSCP MAPPING .WORD IO.'FCN ; QIO REQUEST .BYTE OP.'OPCOD ; OPCODE .BYTE PKTSIZ ; SIZE OF MSCP/TMSCP PACKET (BYTES) .WORD PRO ; OPCODE PROCESSING ROUTINE .ENDM ; FUNCT .MACRO JMPTBL TYPE .IF IDN , CLASID = 0 ; CLASS DRIVER VERSION CLADAT = 2 ; PROCESS DATAGRAMS CLAEND = 4 ; DISPATCH END PACKETS CLAERR = 6 ; PROCESS FATAL ERRORS / RESETS CLACMD = 10 ; STATE PROCESSING, I/O INITIATION SCUCB = 12 ; SCAN UCB LIST FOR UCBS CLASYN = 14 ; PERFORM CLASS SYNCH .ENDC ; CLASS .IF IDN , PORTID = 0 ; PORT DRIVER VERSION PORSUP = 2 ; SET UP NECESSARY PORT INFORMATION PORINT = 4 ; GET RESPONSE PACKETS, INTERRUPT PROC PORSEN = 6 ; SEND COMMAND PACKET TO CONTROLLER PORUMR = 10 ; ALL/DEALL STATIC UMRS, DYNAM WAIT BLKS PKTAC = 12 ; ALLOCATE, ZERO COMMAND PACKET PKTDR = 14 ; DEALLOCATE RESPONSE PACKET PKTCHK = 16 ; CHECK REQUIRED RESOURCES (NON-IMMED) STOMP = 20 ; HARD INITIALIZE CONTROLLER CONCNT = 22 ; NUMBER OF CLASS DRIVERS CONNECTED PKTCH1 = 24 ; CHECK REQUIRED RESOURCES (IMMED) PORSYN = 26 ; PORT SYNCH PROCESSING MPPROX = 30 ; PLACE HOLDER. MPPRO DEFINED BELOW .ENDC ; PORT .ENDM ; JMPTBL ;========================================================================== ; NULL MACROS THAT ARE REPLACED BY LOGPU.MAC IF TERMINAL LOGGING IS DESIRED ;========================================================================== .MACRO LOGDAT .ENDM .MACRO LOGCMD .ENDM .MACRO LOGRSP .ENDM .MACRO LOGSYN .ENDM .MACRO LOGSTP .ENDM .MACRO LOGRTN .ENDM .LIST ;========================================================================= ; DRIVER WIDE SYMBOL DEFINITIONS ;========================================================================= RPLEN = 60. ; RESPONSE PACKET LENGTH (BYTES) CPLEN = 60. ; COMMAND PACKET LENGTH (BYTES) ENVLEN = 4. ; ENVELOPE LENGTH (BYTES) MPPRO = 30 ; OFFSET FOR $MPPRO VECTORED ADDR IO.0 = 0 ; ZERO ENTRY FOR I/O FUNCTION CODE OP.0 = 0 ; ZERO ENTRY FOR T/MSCP FUNCTION CODE FO.OP = 2 ; OFFSET FOR T/MSCP OPCODE FO.SZ = 3 ; OFFSET FOR SIZE OF PACKET FO.CMD = 4 ; OFFSET FOR OPCODE PROCESSING ROUTINE FOSIZ = 6 ; SIZE OF ENTRY IN DISPATCH TABLE GUS.L = 6 ; GET UNIT STATUS CMD LENGTH ONL.L = 22 ; ONLINE CMD LENGTH ABO.L = 10 ; ABORT CMD LENGTH AVL.L = 6 ; AVAILABLE CMD LENGTH GCS.L = 10 ; GET COMMAND STATUS CMD LENGTH SCC.L = 20 ; SET CONTROLLER CHARACTERISTIC CMD LEN CMDINT = -4 ; COMMAND INTERRUPT OFFSET RSPINT = -2 ; RESPONSE INTERRUPT OFFSET OWN = 100000 ; PACKET OWNER FLAG FLAG = 40000 ; FLAG MSGLNG = -4 ; OFFSET TO MESSAGE LENGTH VCID = -1 ; OFFSET TO VIRTUAL CIRCUIT ID CREDIT = -2 ; OFFSET TO MESSAGE/CREDIT FIELD MSGTYP = 360 ; MESSAGE TYPE MASK CRDDBT = 17 ; CREDIT/DEBIT MASK VCDSK = 0 ; DISK VIRTUAL CIRCUIT ID VCTAP = 1 ; TAPE VIRTUAL CIRCUIT ID VCDIA = 255. ; DIAGNOSTIC VIRTUAL CIRCUIT ID MSGMUL = 20 ; MESSAGE FIELD MULTIPLIER MSGSEQ = 0 ; SEQUENTIAL MESSAGE MSGDAT = 1 ; DATAGRAM MESSAGE MSGCRD = 2 ; CREDIT MESSAGE MSGNNP = 3 ; NODE NAME PACKET MSGMNT = 15. ; MAINTENANCE MESSAGE RETRY = 3. ; CONTROLLER ERROR RETRY COUNT STMOC = 10. ; TIME-OUT COUNT RNGSIZ = 4 ; RSP RING DESCRIPTOR LENGTH CMDSIZ = 4 ; CMD RING DESCRIPTOR LENGTH RSPLNG = RPLEN+ENVLEN ; TOTAL LENGTH OF RESPONSE PACKET CMDLNG = CPLEN+ENVLEN ; TOTAL LENGTH OF COMMAND PACKET MSW = 2 ; MOST SIGNIFICANT WORD IN RING UMRWTB = 20. ; SIZE OF UMR WAIT BLOCK .IIF DF M$$PRO UMRWTB=UMRWTB+2 ; ADD WORD FOR UNIBUS MASK